[Q001] Is there a way through the hardware for the
transmitting side to determine that the receiving side has actually received the data?
[Q002] Is it necessary to use the timer during
communications?
[Q003] I have trouble getting communication using timer
interrupt and m4aSoundMain() function synchronized with v-blank interrupt to coexist.
[Q004] What is the best way to determine the status of the
cable connection?
[Q005] Can noise cause the communications error flag to
rise during communication?
[Q006] Regarding the communications data block size in the
multi-play communications library, when I change the MULTI_SIO_BLOCK_SIZE from 16 to 14 or
18, the communications become unstable in MultiSio.h and MultiSioDefine.s,. Can you
explain why?
[Q007] Is the precision of communications affected
when the battery voltage drops?
Is there a way through the hardware for the transmitting side to determine that the receiving side has actually received the data?
In multi-player communications, there is no way when using hardware to determine that the other party has actually received the data. For this reason, you should implement some convention such as having the receiving side send back a signal once the data has been received, or freeing enough of a time interval for transmission to ensure that the data is received.
Is it necessary to use the timer during communications?
Simultaneous communication interrupts to the master and slave cannot be staged due to
errors in the timing of waveform edge detection, as per the hardware specifications.
(There are individual variations.)
For this reason, the master device could conceivably start transmissions before the slave
device has finished receiving data, leading to a failure in communications.
You could ensure communications during an SIO interrupt by inserting a sufficient wait
before the master begins transmitting, but to do so would require a wait equal to the
guaranteed period for successful communications plus at least 600 clock cycles (an
adequate value for errors in the generation of SIO interrupts). This long wait alone would
be a heavy burden.
Moreover, other interrupt processes (m4aSoundVSync(), etc.) would be delayed by that much,
and there is a high probability this would have bad effects.
For these reasons, please be sure to use the timer for data transmissions, and free up
a transfer interval that is 600 clock cycles longer than the time actually used for
transmission operations.
Consider this as an adequate value to ensure proper operation of multi-player
communications with all production AGBs.
I have trouble getting communication using timer interrupt and m4aSoundMain() function synchronized with v-blank interrupt to coexist.
All devices must enable multiple interrupts by SIO interrupts to the slave device and
timer interrupts to the master device.
Note that when you use multiple interrupts in combination with m4aSoundMain(), during an
interrupt, the size of the stack area for interrupts increases by that amount. So you need
to make it avoid stack overflow.
What is the best way to determine the status of the cable connection?
The status of the terminal can be checked with the general-purpose input/output register (REG_RCNT:0x04000134). But because various devices can connect to the SIO connector, there is a chance of making an incorrect characterization by just checking the terminal status. Please be sure to check whether communications are actually taking place and whether or not there is a response from the slave device.
Can noise cause the communications error flag to be set during communications?
Yes. An error can also occur if the connector is not attached properly. Please keep these in mind when you create your program. Since the communications error flag is not dependable during communications, verify the flag when a communication exchange has stopped, such as, during the SI0 interrupt processing.
Regarding the communications data block size in the multi-play communications library, when I change the MULTI_SIO_BLOCK_SIZE from 16 to 14 or 18 in MultiSio.h and MultiSioDefine.s, the communication becomes unstable. Can you explain why?
When the value of MULTI_SIO_BLOCK_SIZE is not a multiple of 4 bytes, the C language structure padding in MultiSio.h and MultiSioDefine.s will distort the packet alignment.
Is the precision of communications affected when the battery voltage drops?
No. The device generates a stable voltage internally that is unrelated to the amount of charge left in the battery.
D.C.N. AGB-06-0027-001A1 (2/21/01)
© 2001 Nintendo of America Inc.